// 对象合并
export function mergeDeep(target: Record<string, any>, source: Record<string, any>) {
  // 如果目标是一个对象且源是一个对象
  if (
    typeof target === 'object' &&
    target !== null &&
    typeof source === 'object' &&
    source !== null
  ) {
    // 遍历源对象的所有属性
    for (const key in source) {
      // 如果源对象的属性也是对象，递归合并
      if (typeof source[key] === 'object' && source[key] !== null) {
        // 如果目标对象中没有对应属性，创建一个空对象
        if (!target[key]) {
          target[key] = {}
        }
        // 递归合并嵌套对象
        mergeDeep(target[key], source[key])
      } else {
        // 如果源对象的属性不是对象，直接赋值
        target[key] = source[key]
      }
    }
  }
  // 返回合并后的目标对象
  return target
}

// 数据合并
export function mergeRecursive(source, target) {
  for (let p in target) {
    try {
      if (target[p].constructor == Object) {
        source[p] = mergeRecursive(source[p], target[p])
      } else {
        source[p] = target[p]
      }
    } catch (e) {
      source[p] = target[p]
    }
  }
  return source
}
